package com.ruoyi.product.service.impl;

import java.util.Collections;
import java.util.List;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.product.domain.*;
import com.ruoyi.product.mapper.ProductAttributeKeyMapper;
import com.ruoyi.product.mapper.ProductAttributeValueMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.product.mapper.ProductAttributeSkuMapper;
import com.ruoyi.product.service.IProductAttributeSkuService;
import org.springframework.util.CollectionUtils;

/**
 * 商品属性规格价格Service业务层处理
 * 
 * @author lb
 * @date 2024-01-17
 */
@Service
public class ProductAttributeSkuServiceImpl implements IProductAttributeSkuService 
{
    @Autowired
    private ProductAttributeSkuMapper productAttributeSkuMapper;
    @Autowired
    private ProductAttributeKeyMapper productAttributeKeyMapper;
    @Autowired
    private ProductAttributeValueMapper productAttributeValueMapper;
    /**
     * 查询商品属性规格价格
     * 
     * @param id 商品属性规格价格主键
     * @return 商品属性规格价格
     */
    @Override
    public ProductAttributeSku selectProductAttributeSkuById(Long id)
    {
        return productAttributeSkuMapper.selectProductAttributeSkuById(id);
    }

    /**
     * 查询商品属性规格价格列表
     * 
     * @param productAttributeSku 商品属性规格价格
     * @return 商品属性规格价格
     */
    @Override
    public List<ProductAttributeSku> selectProductAttributeSkuList(ProductAttributeSku productAttributeSku)
    {
        return productAttributeSkuMapper.selectProductAttributeSkuList(productAttributeSku);
    }

    /**
     * 新增商品属性规格价格
     * 
     * @param productAttributeSku 商品属性规格价格
     * @return 结果
     */
    @Override
    public int insertProductAttributeSku(ProductAttributeSku productAttributeSku)
    {
        return productAttributeSkuMapper.insertProductAttributeSku(productAttributeSku);
    }

    /**
     * 修改商品属性规格价格
     * 
     * @param productAttributeSku 商品属性规格价格
     * @return 结果
     */
    @Override
    public int updateProductAttributeSku(ProductAttributeSku productAttributeSku)
    {
        return productAttributeSkuMapper.updateProductAttributeSku(productAttributeSku);
    }

    /**
     * 批量删除商品属性规格价格
     * 
     * @param ids 需要删除的商品属性规格价格主键
     * @return 结果
     */
    @Override
    public int deleteProductAttributeSkuByIds(Long[] ids)
    {
        return productAttributeSkuMapper.deleteProductAttributeSkuByIds(ids);
    }

    /**
     * 删除商品属性规格价格信息
     * 
     * @param id 商品属性规格价格主键
     * @return 结果
     */
    @Override
    public int deleteProductAttributeSkuById(Long id)
    {
        return productAttributeSkuMapper.deleteProductAttributeSkuById(id);
    }

    @Override
    public int updateProductSpecs(ProductSpecsParamsAO productSpecsParamsAO) {
        Long productId = productSpecsParamsAO.getProductId();
        // 根据productId删除3张表的数据
        productAttributeKeyMapper.deleteAttributeKeyByProductId(productId);
        productAttributeValueMapper.deleteAttributeValueByProductId(productId);
        productAttributeSkuMapper.deleteAttributeSkuByProductId(productId);
        List<ProductSpecsKeyAO> specsKeyList = productSpecsParamsAO.getSpecsKeyList();
        List<ProductSkuDataAO> skuDataList = productSpecsParamsAO.getSkuDataList();
        if(!CollectionUtils.isEmpty(specsKeyList) && !CollectionUtils.isEmpty(skuDataList) ){
            for(ProductSpecsKeyAO keyAO:specsKeyList){
                String attrname = keyAO.getAttrType();
                ProductAttributeKey productAttributeKey = new ProductAttributeKey();
                productAttributeKey.setProductId(productId);
                productAttributeKey.setAttrName(attrname);
                productAttributeKey.setCreateBy(SecurityUtils.getUsername());
                productAttributeKey.setCreateTime(DateUtils.getNowDate());
                // p_product_attribute_key 表中插入数据
                productAttributeKeyMapper.insertProductAttributeKey(productAttributeKey);
                Long attrKeyId = productAttributeKey.getId(); // 获取自增的id
                List<String> attrValueList = keyAO.getAttrValue();
                for(String attrValue:attrValueList){
                    // p_product_attribute_key 表中插入数据
                    ProductAttributeValue productAttributeValue = new ProductAttributeValue();
                    productAttributeValue.setProductId(productId);
                    productAttributeValue.setAttrValue(attrValue);
                    productAttributeValue.setAttrKeyId(attrKeyId);
                    productAttributeValueMapper.insertProductAttributeValue(productAttributeValue);
                }
            }
            for(ProductSkuDataAO productSkuDataAO:skuDataList){
                String specs1 = productSkuDataAO.getSpecs1();
                String specs2 = productSkuDataAO.getSpecs2();
                String attrSymbolPath = specs1;
                if(!StringUtils.isEmpty(specs2)){
                    attrSymbolPath+=","+specs2;
                }
                // p_product_attribute_sku 表中插入数据
                ProductAttributeSku productAttributeSku = new ProductAttributeSku();
                productAttributeSku.setProductId(productId);
                productAttributeSku.setAttrSymbolPath(attrSymbolPath);
                productAttributeSku.setOriginalPrice(productSkuDataAO.getOriginalPrice());
                productAttributeSku.setSellPrice(productSkuDataAO.getSellPrice());
                productAttributeSkuMapper.insertProductAttributeSku(productAttributeSku);
            }

        }
        return 0;
    }

    @Override
    public ProductSpecsParamsAO getProductSpecs(Long productId) {
        ProductSpecsParamsAO productSpecsParamsAO = new ProductSpecsParamsAO();
        // 查询商品规格sku信息
        List<ProductSkuDataAO> skuDataAOList = productAttributeSkuMapper.selectProductSkuDataByProductId(productId);
        // 查询商品规格属性信息
        List<ProductSpecsKeyAO> specsKeyList = productAttributeKeyMapper.selectProductSpecsKeyByProductId(productId);
        // 赋值
        productSpecsParamsAO.setSkuDataList(skuDataAOList);
        productSpecsParamsAO.setSpecsKeyList(specsKeyList);
        return productSpecsParamsAO;
    }
}
